import { EventEmitter } from 'node:events';

const emitter = new EventEmitter();

emitter.on('start', (arg1, arg2) => {
  console.log('start 自定义事件触发了', arg1, arg2);
});

// 直接使用
// emitter.emit('start', 'arg1', 'arg2');

// 集成

// function MusicPlay() {
//   this.playing = false;
//   EventEmitter.call(this);
// }

// MusicPlay.prototype = Object.create(EventEmitter.prototype);

// MusicPlay.prototype.play = function () {
//   this.playing = true;
//   this.emit('play');
// };
// MusicPlay.prototype.pause = function () {
//   this.playing = false;
//   this.emit('pause');
// };

class MusicPlay extends EventEmitter {
  constructor() {
    super();
    this.playing = false;
  }

  play() {
    this.playing = true;
    this.emit('play');
  }

  pause() {
    this.playing = false;
    this.emit('pause');
  }

  remove(type, fn) {
    console.log('移除事件', type);

    // 这里跟 web的是一样的， 需要有一个  移除的 事件名，事件函数
    this.removeListener(type, fn);
  }
}

/**
 * 演示 EventEmitter 的继承
 */

const m = new MusicPlay();

m.on('play', () => {
  console.log('播放音乐');
});

const pauseFn = () => {
  console.log('暂停播放');
};

m.on('pause', pauseFn);

m.play();

setTimeout(() => {
  m.pause();
}, 1000);

m.remove('pause', pauseFn);

m.once('test', () => {
  console.log('只触发一次');
});

m.emit('test');
m.emit('test');
